package edu.nf.ch01;

import edu.nf.ch01.service.UserService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;

/**
 * springboot应用的核心启动类（springboot应用是通过main方法直接启动的）。
 * 这个类上包含一个@SpringBootApplication注解，它是一个复合注解，
 * 这个注解又包含了@Configuration、@ComponentScan、@EnableAutoConfiguration。
 * 因此，这个启动类既是一个启动类同时也是一个spring的配置类，
 * 还具备扫描的功能以及启用了自动配置的功能。
 * 注意：springboot默认的扫描路径是从当前启动类所在的包开始扫描（包含所有的子包）,
 * 也可以通过scanBasePackages属性重新制定扫描的包路径（不建议修改）
 *
 * @EnableAutoConfiguration注解启用springboot的自动配置功能，
 * 它的作用是通过一个导入选择器将所有自动配置类加载到spring容器中
 * 完成自动化装配
 *
 */
@SpringBootApplication
//@SpringBootApplication(scanBasePackages = "xxx")
public class Ch01Application {

    public static void main(String[] args) {
        //运行springboot应用，run方法运行完成后会返回一个初始化好的IOC容器。
        //注意：这个IOC容器会根据当前部署环境而改变
        //在没有集成web环境是，初始化的就是一个普通的IOC容器
        //如果集成了web，那么初始化的就是一个WebApplicationContext
        ApplicationContext context = SpringApplication.run(Ch01Application.class, args);
        //获取bean
        UserService service = context.getBean(UserService.class);
        System.out.println(service);

    }

}
